package cn.tiansu.eway.common.utils;

import java.io.File;
import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * dom解析器
 * 
 * @author wupeng
 * 
 */
public class DOMConfigurator
{
	private final static Logger log = Logger.getLogger(DOMConfigurator.class);// 记录日志
	private static Map<String, Document> xmlMap = new HashMap<String, Document>();// 存放XML
	private Document document;

	/**
	 * 默认构造器
	 * 
	 * @param file
	 *            :文件名称(包括路径)
	 */
	public DOMConfigurator(String file)
	{
		document = xmlMap.get(file);
		if (document == null)
		{
			SAXReader saxReader = new SAXReader();
			try
			{
				document = saxReader.read(new File(file));
				xmlMap.put(file, document);
			}
			catch (DocumentException e)
			{
				log.error("读取XML失败，XML:" + file + "不存在:"
						+ e.getLocalizedMessage());
				e.printStackTrace();
			}
			catch (MalformedURLException e)
			{
				e.printStackTrace();
			}
		}
	}

	/**
	 * 获取根节点 String elementName=element.getName(); 获得element节点的名字 String
	 * elementValue=element.getText(); 获得element节点的文本节点值 Attribute
	 * attribute=element.attribute(); 获得element节点的属性 String
	 * attrValue=element.attributeValue("attrValue"); 获得属性值 String
	 * text=element.elementTextTrim("key");//获取值
	 * 
	 * @return
	 */
	public List<Element> getRootElement()
	{
		if (document == null)
		{
			return null;
		}
		// root元素是xml文档的根节点。一切XML分析都是从Root元素开始的。
		return document.getRootElement().elements();
	}

	/**
	 * 获取节点属性
	 * 
	 * @param node
	 *            :节点 如://root//city
	 * @return
	 */
	public List<Element> getElement(String node)
	{
		if (document == null)
		{
			return null;
		}
		return document.selectNodes(node);
	}
	
	public static void main(String[] args)
	{
			
		
	}
}
